/**
 * @Description: PDA扫码：其中通过 (HTML5+ 扩展规范)调用了Android原生API
 * @Doc: https://uniapp.dcloud.net.cn/tutorial/use-html5plus.html 
 * @Doc: https://blog.csdn.net/qq_56098191/article/details/126344813
 * @Author: yuhao 1262172637@qq.com
 * @Date: 2024-03-04 17:37:21
 * @LastEditors: yuhao 1262172637@qq.com
 * @LastEditTime: 2024-03-26 10:38:43
 * @FilePath: /uniapp-android-pda-demo/utils/scanCode.js
 */

// pda的特色设置中需要关闭-禁止将扫描按键的键值传递给应用的开关
let mainActivity; // 运行时的主要活动activity
let intentFilter; // 实例化的意图过滤器
let broadcastReceiver; // 广播接收器
let repeatFlag = false;

// 初始化定义广播
const init = (onReceiveCallback) => {
	/* #ifdef APP-PLUS */
	// 获取activity
	mainActivity = plus.android.runtimeMainActivity();
	// 导入Java类对象：https://developer.android.google.cn/reference/android/content/IntentFilter
	const IntentFilter = plus.android.importClass('android.content.IntentFilter');
	//实例化一个意图过滤器
	intentFilter = new IntentFilter();
	// 通过意图过滤器的addAction过滤指定动作, com.android.server.scannerservice.broadcast为设备配置的广播名称
	intentFilter.addAction("com.android.server.scannerservice.broadcast");
	// BroadcastReceiver广播接收器接口:implements 实现接口  onReceive实现接口的方法
	broadcastReceiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
		onReceive: function(context, intent) {
			plus.android.importClass(intent);
			// 扫描设置的开发者选项--手持机pda的广播键值scannerdata
			const code = intent.getStringExtra("scannerdata");
			console.log('pda原始扫描数据:', code);
			//防重复
			if (repeatFlag) return;
			repeatFlag = true;
			setTimeout(function() {
				repeatFlag = false;
			}, 150);
			// 到这里扫描成功,获取结果，可以调用自己的业务逻辑
			onReceiveCallback && onReceiveCallback(code);
		}
	});
	/* #endif */
}

// 开始广播监听扫码
const start = () => {
	/* #ifdef APP-PLUS */
	mainActivity.registerReceiver(broadcastReceiver, intentFilter);
	/* #endif */
}

// 停止广播监听扫码
const stop = () => {
	/* #ifdef APP-PLUS */
	mainActivity.unregisterReceiver(broadcastReceiver);
	/* #endif */
}

// 主动触发扫描
const triggerScan = () => {
	// 获取Android意图类
	let Intent = plus.android.importClass("android.content.Intent");
	// 实例化意图  
	let intent = new Intent();
	// 定义意图，由厂商提供(此处设置为东大的：开始扫描广播com.scan.onStartScan，对应的停止扫描广播为com.scan.onEndScan)
	intent.setAction("com.scan.onStartScan");
	// 广播这个意图
	mainActivity.sendBroadcast(intent);
}

// 主动关闭扫描
const closeScan = () => {
	// 获取Android意图类
	let Intent = plus.android.importClass("android.content.Intent");
	// 实例化意图  
	let intent = new Intent();
	// 定义意图，由厂商提供(此处设置为东大的：开始扫描广播com.scan.onStartScan，对应的停止扫描广播为com.scan.onEndScan)
	intent.setAction("com.scan.onEndScan");
	// 广播这个意图
	mainActivity.sendBroadcast(intent);
}

export const broadcastScan = {
	init,
	start,
	stop,
	triggerScan,
	closeScan
};

// 引入使用
// 	import { broadcastScan } from './scanCode.js';